package ar.uade.fain.ai.tpo;

import ar.uade.fain.ai.tpo.controller.AdministracionComidaControlador;
import ar.uade.fain.ai.tpo.controller.AdministracionPedidoControlador;
import ar.uade.fain.ai.tpo.controller.AdministracionProductoControlador;
import ar.uade.fain.ai.tpo.controller.AdministracionSeccionControlador;
import ar.uade.fain.ai.tpo.controller.Controlador;
import ar.uade.fain.ai.tpo.dao.CaracteristicaDAO;
import ar.uade.fain.ai.tpo.dao.CategoriaDAO;
import ar.uade.fain.ai.tpo.dao.ClienteDAO;
import ar.uade.fain.ai.tpo.dao.ComidaDAO;
import ar.uade.fain.ai.tpo.dao.PedidoDAO;
import ar.uade.fain.ai.tpo.dao.ProductoDAO;
import ar.uade.fain.ai.tpo.dao.ProveedorDAO;
import ar.uade.fain.ai.tpo.dao.RecetaDAO;
import ar.uade.fain.ai.tpo.dao.SeccionDAO;
import ar.uade.fain.ai.tpo.dao.UnidadDAO;

public class Sistema implements Controlador {

	private static Sistema instancia;

	private AdministracionSeccionControlador seccionControlador;
	private AdministracionProductoControlador productoControlador;
	private AdministracionComidaControlador comidaControlador;
	private AdministracionPedidoControlador pedidoControlador;

	private Sistema() {
		super();
	}

	@Override
	public void init() {
		seccionControlador = new AdministracionSeccionControlador();
		comidaControlador = new AdministracionComidaControlador();
		productoControlador = new AdministracionProductoControlador();
		pedidoControlador = new AdministracionPedidoControlador();
		final ProductoDAO productoDAO = new ProductoDAO();
		final SeccionDAO seccionDAO = new SeccionDAO();
		final CategoriaDAO categoriaDAO = new CategoriaDAO();
		final UnidadDAO unidadDAO = new UnidadDAO();
		final ComidaDAO comidaDAO = new ComidaDAO();
		final ProveedorDAO proveedorDAO = new ProveedorDAO();
		final RecetaDAO recetaDAO = new RecetaDAO();
		final CaracteristicaDAO caracteristicaDAO = new CaracteristicaDAO();
		final PedidoDAO pedidoDAO = new PedidoDAO();
		final ClienteDAO clienteDAO = new ClienteDAO();
		productoDAO.setCategoriaDAO(categoriaDAO);
		productoDAO.setProveedorDAO(proveedorDAO);
		productoDAO.setUnidadDAO(unidadDAO);
		recetaDAO.setCaracteristicaDAO(caracteristicaDAO);
		recetaDAO.setProductoDAO(productoDAO);
		comidaDAO.setCategoriaDAO(categoriaDAO);
		comidaDAO.setRecetaDAO(recetaDAO);
		categoriaDAO.getAll();
		unidadDAO.getAll();
		getSeccionControlador().setSeccionDAO(seccionDAO);
		getSeccionControlador().init();
		getComidaControlador().setComidaDAO(comidaDAO);
		getComidaControlador().setRecetaDAO(recetaDAO);
		getComidaControlador().init();
		getProductoControlador().setCategoriaDAO(categoriaDAO);
		getProductoControlador().setProductoDAO(productoDAO);
		getProductoControlador().setProveedorDAO(proveedorDAO);
		getProductoControlador().setUnidadDAO(unidadDAO);
		getProductoControlador().init();
		getPedidoControlador().setPedidoDAO(pedidoDAO);
		getPedidoControlador().setClienteDAO(clienteDAO);
		getPedidoControlador().init();
	
	}

	@Override
	public void destroy() {
		seccionControlador = null;
		comidaControlador = null;
		productoControlador = null;
		instancia = null;
	}
	
	public AdministracionSeccionControlador getSeccionControlador() {
		return seccionControlador;
	}

	public AdministracionProductoControlador getProductoControlador() {
		return productoControlador;
	}

	public AdministracionComidaControlador getComidaControlador() {
		return comidaControlador;
	}

	public AdministracionPedidoControlador getPedidoControlador() {
		return pedidoControlador;
	}

	public static Sistema get() {
		if (instancia == null) {
			instancia = new Sistema();
			instancia.init();
		}
		return instancia;
	}
}
